提供了用于优化仿真的固定功能和可编程图形运算的系统、方法和计算机可读介质。接收包括要渲染的图像或场景的固定功能和可编程状态的数据。将该图像的数据转换成运算。对这些运算应用一个或多个优化。实现经优化的运算以渲染场景。
1.一种用于优化仿真的固定功能和可编程图形的计算机实现的方法,所述方法包括:接收包括要渲染的一个或多个图像的固定功能和可编程状态的数据(505);将所述一个或多个图像的数据转换成一个或多个表示(510);对所述表示应用一个或多个优化(515);以及实现经优化的表示以渲染所述一个或多个图像(520)。
2.如权利要求1所述的方法,其特征在于,还包括:显示所渲染的图像。
3.如权利要求2所述的方法,其特征在于,所述数据被转换成数据并行程序。
4.如权利要求1所述的方法,其特征在于,所述一个或多个图像到表示的转换包括软件光栅化。
5.如权利要求4所述的方法,其特征在于,所述转换由中央处理单元执行。
6.如权利要求4所述的方法,其特征在于,所述转换由计算设备执行。
7.如权利要求1所述的方法,其特征在于,所述一个或多个优化包括当在没有透视的情况下渲染图元时禁用透视校正属性内插。
8.如权利要求1所述的方法,其特征在于,所述一个或多个优化包括重新安排运算以使得Z计算在程序中较早地进行。
9.如权利要求1所述的方法,其特征在于,所述一个或多个优化包括移除不必要的范围检查运算。
10.如权利要求7所述的方法,其特征在于,所述一个或多个优化包括移除不必要的数据类型转换指令。
11.如权利要求10所述的方法,其特征在于,所述一个或多个优化包括确定在距离恒定的情况下细节水平对于所有像素恒定。
12.如权利要求2所述的方法,其特征在于,即时编译器实现所述数据并行程序以渲染所述一个或多个图像。
13.如权利要求2所述的方法,其特征在于,解释器对像素块解释一个或多个数据并行程序以渲染所述一个或多个图像。
14.一种用于优化仿真的固定功能和可编程图形的计算机化系统,所述系统包括:被配置成接收包括要渲染的一个或多个图像的固定功能和可编程状态的数据的接收组件(220);被配置成将所述数据转换成一个或多个表示的转换组件(230);被配置成对所述一个或多个表示应用一个或多个优化的优化组件(240);以及被配置成执行一个或多个经优化的表示以渲染所述一个或多个图像的执行组件(250)。
15.如权利要求14所述的系统,其特征在于,还包括:用于在显示设备上显示所渲染的图像的显示组件。
16.如权利要求14所述的系统,其特征在于,所述转换由中央处理单元执行。
17.如权利要求14所述的系统,其特征在于,所述转换由计算设备执行。
18.如权利要求14所述的系统,其特征在于,即时编译器实现所述经优化的表示以渲染所述一个或多个图像。
19.如权利要求14所述的系统,其特征在于,解释器对像素块解释一个或多个经优化的表示以渲染所述一个或多个图像。
20.一种或多种其上包含计算机可执行指令的计算机可读介质,所述指令在被执行时执行一种用于优化仿真的固定功能和可编程图形的方法,所述方法包括:接收包括要渲染的一个或多个图像的固定功能和可编程状态的数据(505);将所述要渲染的一个或多个图形的数据转换成由高级命令表示的数据并行程序(510);对所述高级命令应用一个或多个优化(515);实现经优化的高级命令以渲染所述一个或多个图像(520);以及显示所渲染的一个或多个图像(520)。背景中央处理单元(CPU)是为通用计算设计的并且不包含用于执行如纹理采样、光栅化和输出混合等固定功能图形运算的专用图形硬件。不像图形硬件,CPU硬件未被设计成用大量线程来隐藏存储器等待时间。简要概述本发明的各实施例涉及用于优化仿真的固定功能和可编程图形运算的系统、方法和计算机可读介质。为了利用CPU来实现图形,可使用利用CPU的软件光栅化来仿真图形硬件。接收包括要渲染的图像或场景的固定功能状态和可编程状态的数据。将该图像的数据转换成一个或多个表示。对这些表示应用一个或多个优化。实现经优化的表示以渲染场景。提供本概述是为了介绍将在以下详细描述中进一步描述的一些概念。本概述不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。附图简述以下参考附图详细描述各实施例,附图中:图1是适用于实现本发明的各实施例的示例性计算环境的框图;图2是适用于实现本发明的各实施例的示例性计算系统体系结构的框图;图3是示出根据本发明的一实施例的优化软件光栅化的示例性图示的流程图;图4是示出根据本发明的一实施例的示例性优化组件的框图;以及图5是根据本发明的一实施例的对软件光栅化应用优化的方法的流程图。详细描述此处用细节来描述本发明的各实施例的主题以满足法定要求。然而,该描述本身并非旨在限制本专利的范围。相反,发明人设想所要求保护的主题还可结合其他当前或未来技术按照其他方式来具体化,以包括不同的步骤或类似于本文中所描述的步骤的步骤组合。此外,尽管术语“步骤”和/或“框”可在此处用于指示所采用的方法的不同元素,但除非而且仅当明确描述了各个步骤的顺序时,该术语不应被解释为意味着此处公开的各个步骤之中或之间的任何特定顺序。本发明的各实施例提供用于优化仿真的固定功能和可编程图形的系统、方法和计算机可读介质。接收包括要渲染的一个或多个图像的固定功能和可编程状态的数据。将该一个或多个图像的数据转换成一个或多个表示。对这些表示应用一个或多个优化。实现经优化的表示以渲染该一个或多个图像。在另一方面,提供了一种用于优化仿真的固定功能和可编程图形的计算机化系统。该系统包括接收组件和转换组件,该接收组件被配置成接收包括要渲染的一个或多个图形的固定功能和可编程状态的数据,该转换组件被配置成将数据转换成一个或多个表示。该系统还包括优化组件和执行组件,该优化组件被配置成对一个或多个表示应用一个或多个优化,该执行组件被配置成执行该一个或多个经优化的表示以渲染一个或多个图像。在又一方面,提供了一种或多种其上包含有计算机可执行指令的计算机可读介质,这些指令在被执行时执行一种优化仿真的固定功能和可编程图形的方法。接收要渲染的一个或多个图像的数据。将要渲染的一个或多个图像的数据转换成由图形流水线的固定功能和可编程状态的高级命令表示的数据并行程序。对这些高级命令应用一个或多个优化。实现经优化的高级命令以渲染一个或多个图像。显示该一个或多个图像。概括地参考附图,并首先具体参考图1,示出了用于实现本发明的各实施例的示例性操作环境,并将其概括地指定为计算设备100。计算设备100只是合适的计算环境的一个示例,并且不旨在对本发明的使用范围或功能提出任何限制。也不应将计算环境100解释为对所示出的任一模块/模块或其组合有任何依赖性或要求。各实施例可以在计算机代码或机器可使用指令的一般上下文中描述,机器可使用指令包括由计算机或诸如个人数据助理或其他手持式设备等其他机器执行的诸如程序模块等的计算机可执行指令。一般而言,包括例程、程序、对象、模块、数据结构等的程序模块指的是执行特定任务或实现特定抽象数据类型的代码。各实施例可以在各种系统配置中实施,这些系统配置包括手持式设备、消费电子产品、通用计算机、专用计算设备等等。各实施例也可以在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实施。继续参考图1,计算设备100包括直接或间接耦合以下设备的总线110:存储器112、一个或多个处理器114、一个或多个呈现模块116、输入/输出(I/O)端口118、I/O模块120、和说明性电源122。总线110可以是一条或多条总线(诸如地址总线、数据总线、或其组合)。尽管为了清楚起见图1的各框用线条示出,但是在实际上,各模块的轮廓并不是那样清楚,并且比喻性地来说,线条更精确地将是灰色的和模糊的。例如,可以将诸如显示设备等的呈现模块认为是I/O模块。而且,处理器具有存储器。发明人此点认识到,这是本领域的特性,并且重申,图1的图示只是例示可结合一个或多个实施例来使用的示例性计算设备。诸如“工作站”、“服务器”、“膝上型计算机”、“手持式设备”等分类之间没有区别,它们全部都被认为是在图1的范围之内的并且被称为“计算机”或“计算设备”。计算设备100通常包括各种计算机可读介质。作为示例而非限制,计算机可读介质可以包括随机存取存储器(RAM);只读存储器(ROM);电可擦可编程序只读存储器(EEPROM);闪存或其他存储技术;CDROM、数字多功能盘(DVD)或其他光学或全息介质;磁带盒、磁带、磁盘存储或其他磁存储设备,载波或可以用来编码所需要的信息并可以被计算设备100访问的任何其他介质。存储器112包括易失性和/或非易失性存储器形式的计算机存储介质。存储器可以是可移动的,不可移动的,或两者的组合。示例性硬件设备包括固态存储器、硬盘驱动器、光盘驱动器等。计算设备100包括从诸如存储器112或I/O模块120等各种实体读取数据的一个或多个处理器。呈现模块116向用户或其他设备呈现数据指示。示例性呈现模块包括显示设备,扬声器,打印模块,振动模块等。I/O端口118允许计算设备100在逻辑上耦合至包括I/O模块120在内的其他设备,其中某些设备可以是内置的。说明性模块包括话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪、打印机、无线设备等等。如上所述,本发明的各实施例涉及用于优化软件光栅化的计算系统。参考图2,示出了例示根据本发明的一实施例的、被配置成优化软件光栅化的示例性计算系统体系结构200的框图。本领域普通技术人员将理解并认识到,图2所示的计算系统体系结构200仅仅是一个合适的计算系统的示例,并且不旨在对本发明的使用范围或功能提出任何限制。也不应该将计算系统体系结构200解释为对任何单个模块/组件或各模块/组件的组合有任何依赖性或要求。计算系统包括计算设备206和显示器216。计算设备206包括图像模块208、光栅化模块210、API模块212和操作系统214。计算设备206可以是任何类型的计算设备,诸如例如以上参考图1所描述的计算设备100。仅作为示例而非限制,计算设备206可以是个人计算机、台式计算机、膝上型计算机、手持式设备、移动手机、消费电子设备等。然而,应当注意,各实施例不限于在这些计算设备上实现,而是可在处于其各实施例的范围内的各种不同类型的计算设备的任一种上实现。图像模块208传送要渲染的图像或场景的数据。图像模块208可以是计算机游戏程序或要对其渲染图像或场景的其他程序。要渲染的图像或场景可包括但不限于视频游戏图像、视频剪辑、电影图像和静态屏幕图像。应用程序编程接口(API)模块212是操作系统214为支持诸如图像模块208和软件光栅化模块210等计算机程序作出的请求而提供的接口。设备206与显示设备216通信。软件光栅化模块210仿真实现以下更详细地描述的光栅化流水线的硬件。软件光栅化模块利用软件光栅化来仿真图形硬件。软件光栅化使用中央处理单元(CPU)来光栅化多边形,而不是让图形卡上的图形处理单元(GPU)来执行该功能。如图2所示,软件光栅化模块210包括接收组件220、转换组件230、优化组件240和执行组件250。在某些实施例中,所示组件中的一个或多个可被实现为独立应用程序。在其它实施例中,所示模块中的一个或多个可以直接集成到服务器和/或终端用户设备206的操作系统中。本领域的普通技术人员可以理解,图2所示的组件和模块在性质和数量上是示例性的,并且不应被解释为是限制性的。可以采用任何数量的组件来实现其各实施例的范围内的所需功能。此外,各模块可位于任何数量的服务器或计算机上。接收组件210被配置成从图像模块208接收要渲染的图像或场景的数据。要渲染的图像或场景可包括但不限于视频游戏图像、视频剪辑、电影图像和静态屏幕图像。转换组件230被配置成仿真图形硬件并转换接收到的渲染场景或图像。接收到的要渲染的图像或场景的数据包括被转换成数据并行程序的固定功能和可编程图形状态。数据并行程序表示发生的图形运算并组合固定功能和可编程图形状态。在一个实施例中,图形流水线的固定功能和可编程状态被转换成以诸如中间表示(IR)等高级命令表示的四(4)个数据并行程序。这四个数据并行程序是实现对用于渲染场景的图形流水线的顶点处理、几何处理和像素处理的顶点程序、几何程序、镶嵌程序和像素程序。镶嵌程序执行图形流水线的镶嵌阶段。IR可表达多个表示或运算。通过将固定功能和可编程图形流水线状态组合到数据并行程序中,可使用公共代码库来生成中央处理单元(CPU)而不是图形卡的图形处理单元(GPU)上的对固定功能和可编程图形运算两者的高效实现。虽然被讨论为利用由IR表示的数据并行程序,但可以理解,固定功能和可编程功能到需要完成的运算或命令的转换可以按各种方式中的任一种来实现。一旦渲染场景被转换成要由转换组件230执行的运算,图2的优化组件240就执行对跨固定功能和可编程阶段的运算(在一个实施例中是IR)的优化。优化组件执行若干优化。这些优化可以与诸如C++编译器等编译器类似地执行。由转换组件230转换的每一个数据并行程序都组合固定功能和可编程流水线状态,由此对通过软件光栅化仿真的固定功能和可编程图形运算两者应用优化。所应用的优化允许软件光栅化模块在运行时更高效地渲染进行渲染的场景。此外,因为优化是在IR级完成的,所以这些优化可使诸如CPU等所有机器受益,而不管机器如何实现高级IR。参考图2和3,示出了例示包括固定功能和可编程图形状态的数据300到多个运算的转换340的图示。图2的接收组件210接收包括固定功能和可编程图形状态的数据300。数据300由图3中的示例性图形流水线来表示。图形流水线包括用于将数据转换成图像以便显示在显示设备上的各阶段。图形流水线包括输入组装器305、顶点着色器310、几何着色器315、光栅化器320、像素着色器325、纹理采样器330、以及输出合并器335。可以理解,图3所描绘的图形流水线是示例性的,并且可添加附加组件或移除组件。图3的图形流水线300包括固定功能和可编程阶段。固定功能阶段可包括但不限于输入组装器305、光栅化器320、纹理采样器330和输出合并器335。可编程图形状态包括顶点着色器310、几何着色器315和像素着色器325。输入组装器305使用固定功能运算来从存储器中读取顶点,形成几何结构并创建流水线工作项。顶点着色器310是用于通过对对象的顶点数据执行数学运算来在3D环境中向对象添加特殊效果的图形处理功能。几何着色器315从被发送到图形流水线的开头的那些图元中生成诸如点、线和三角形等新图元。光栅化器320执行剪辑、透视划分、视口或裁剪选择和实现。像素着色器325用于操纵像素色彩,通常对图像应用效果,例如真实、块形映射、阴影和膨胀效果。在每一个像素的基础上计算效果的是图形功能。纹理采样器330由顶点着色器310、几何着色器315和像素着色器325用来从存储器中读取数据。纹理采样器330可执行纹理过滤运算,诸如钳夹(clamp)或包裹等纹理寻址模式,在不同的读格式之间转换,并基于细节水平(LOD)值来选择小中见大(multumxa0inxa0parvo,MIP)的程度。输出合并器335是固定功能并执行混合、深度和型板运算。数据300由图2的转换组件230转换成运算或表示。一旦转换,就由图2的优化组件240来优化350运算或表示。示例性优化在下文中更详细地讨论。如可以在图3中看到,在应用优化时,某些运算不再必要,诸如运算360。一旦应用了优化,就由图2的执行组件250来实现其余运算。参考图4,优化组件240包括内插子组件410、LOD子组件420、早Z子组件430、范围分析子组件440和代数求逆子组件450。内插子组件410专用于优化以禁用透视校正属性内插。顶点由4个分量(X、Y、Z和W)构成。X、Y和Z分量表示空间中的元素位置,而W分量用于示出正确的透视。通常生成程序的两个版本。一个版本不包含透视校正属性内插。在绘图时间,光栅化器然后可检测何时所有W值相同并且透视校正版本是不必要的。不具有透视校正属性内插的程序版本消除解决正确的mip图水平所需的若干运算。如果所有分量的所有W值都相同,则透视校正计算是不必要的。透视划分是通过将内插纹理坐标除以每一个像素的W分量来变换诸如纹理坐标等属性以便匹配几何结构的透视的昂贵运算。内插子组件410优化当在没有透视的情况下渲染图元时禁用透视校正属性内插。例如,3维平整对象比该对象成一角度时易于计算。内插子组件410优化检测3维对象是否是平整的,因此划分是不必要的。这允许更快的属性内插并消除计算屏幕空间导数以便在纹理化期间计算mip图细节水平(LOD)的需求,并且消除对平整3维对象执行划分的需求。LOD子组件420优化以检测恒定的细节水平(LOD)以便更快地编码。在程序的每一个步骤,针对IR中的每一个变量跟踪该变量是否是恒定的。在使用恒定变量来确定LOD时,优化器能够对逻辑进行硬编码以索引正确的mip图水平。在图形中,图像可以按许多细节水平来存储并且在运行时选择所需细节水平。例如,较远的对象可能需要较低的细节水平,而较近对象需要较高的细节水平。LOD子组件420确定距离是否是恒定的,并且如果是,则LOD对于所有像素都是恒定的并且对于所有像素只需计算一次。该优化允许更快的纹理采样,以使得不为具有恒定距离的图像计算多个LOD。早Z子组件430是确保相对于程序中的其他指令尽可能早地执行深度测试的指令调度优化。早Z子组件可重新安排IR指令以便在不违反依赖性的情况下尽可能早地进行Z计算。如果需要,则还可以在流水线中将计算Z值的指令移得更高。然后可对照深度缓冲器来检查Z值,并且程序可以在深度测试失败的情况下较早地终止。例如,在绘制对象时,如果该对象完全位于另一对象之后,则可跳过针对该对象的大量计算。早Z子组件430查看每一个运算,确定该运算是否与隐藏对象相关,并且如果是,则在程序中将该运算移至更早。这启用跳过对被遮挡像素的不必要处理的遮挡挑选优化。范围分析子组件440是计算每一个变量都能够在程序执行的每一个步骤保留的可能的值集的范围分析优化。将流水线的固定功能阶段映射到IR可涉及从只能表达特定范围的格式中读取,对各个值执行运算,并且将这些值写回到具有相同范围的格式。因为该优化组件对跨越流水线的固定功能和可编程部分的程序进行运算,所以该优化组件可检测何时值不改变并且不需要昂贵的范围钳夹。在读取具有范围0到1的纹理并且然后将其写入到具有范围0到1的渲染目标时遇到该优化的示例。在该示例中,可移除昂贵的范围检查运算并允许更快的执行。代数求逆子组件450是移除不必要的数据类型转换指令的优化。代数求逆子组件450检测等价的数学运算并且用较不昂贵的运算代入昂贵的运算。这在整个程序中是可能的。示例性代数求逆优化以下在表1中示出。表1
![]()
ntent="drawing" img-format="tif" inline="no" orientation="portrait" wi="701"/>表1中列出的项的定义如下。“e
valuate(评估)”运算在当前像素处对属性值内插。“e
valuateScaled(评估缩放)”运算对乘以纹理的宽度或高度的属性值内插。这在用于采样的LOD对于所有像素恒定时使用。因为LOD是恒定的,所以宽度和高度是恒定的,并且乘法可以对每一个图元(三角形或线条)进行一次,而不是每一个像素进行一次。“e
valuateUNORMScaled(评估UNORM缩放)”运算对乘以渲染目标所支持的值的范围(8位渲染目标可存储256个唯一值)的属性值内插。因为输出范围是恒定的,所以乘法可以对每一个图元(三角形或线条)进行一次,而不是每一个像素进行一次。“Dx”通过使相邻属性值求差来计算属性的导数。“AttribDx(属性Dx)”计算属性对于屏幕空间“x”坐标的的导数。该导数是跨图元恒定的,并因此只需每一个图元计算一次,而不是每一个像素计算一次。“UNORMToFloat(UNORM到浮点)”取范围[0,N]内的整数,并返回范围[0.0,1.0]内的浮点数。“FloatToUNORM(浮点到UNORM)”取范围[0.0,1.0]内的浮点数,并返回范围[0,N]内的整数。优化组件的优化可以互相关或甚至彼此依赖。例如,由代数求逆子组件450执行的许多代数求逆优化依赖于内插子组件410执行的优化。例如,来自表1的代数运算5、6和9在内插子组件410执行优化以禁用透视校正属性内插之后是有效的。在另一示例中,LOD子组件420对检测恒定LOD以更快地编码的优化的执行依赖于代数求逆子组件450对来自表1的代数求逆操作7的执行。再次参考图2,软件光栅化模块210的执行组件250负责一旦执行了优化就执行数据并行程序。因为利用了数据并行程序,所以能够并行执行若干顶点、图元或像素。可以理解,可能存在执行数据并行程序的各种方式。在一个实施例中,数据并行程序在虚拟机中解释。解释器通过并行执行许多像素来在一批像素上摊销仿真成本。由此,对像素块执行程序,而不是每一个像素解释一次程序。在第二实施例中,使用编译器来执行数据并行程序。示例性编译器是能够发出单指令多数据(SIMD)CPU指令的即时(JIT)编译器。经优化的高级IR利用JIT编译器来映射到处理器专用代码。参考图5,提供了用于实现仿真固定功能和可编程图形硬件的经优化的数据并行程序的计算机实现的方法500。在步骤505,接收用于客户机应用程序的三维渲染场景。例如,计算用户可选择要显示的视频。在步骤510,在数据并行程序中转换渲染场景的固定功能和可编程状态以仿真图形硬件。在步骤515,对数据并行程序应用优化。如上所述,可对经转换的固定功能和可编程状态运算应用各种优化。在步骤520,实现数据并行程序。也如上所述,数据并行程序可利用诸如即时编译器等编译器或利用解释器来实现。在显示设备上向客户机显示经优化的渲染场景。此处所描述的实施例在所有方面都旨在是说明性而非限制性的。替换实施例将对本领域的普通技术人员显而易见,而不背离此处所描述的实施例的范围。从前面的描述可以看出,本发明的各实施例很好地适用于实现上文所阐述的目的和目标,并且具有对于所述系统和方法是显而易见且固有的其他优点。可以理解,某些特征和子组合是有用的,并且可以在不参考其他特征和子组合的情况下使用。这由权利要求所构想的,并在权利要求的范围内。